const gulp = require('gulp')
// 1-2. 导入 gulp-cssmin 第三方模块, 用于压缩 css 文件
const cssmin = require('gulp-cssmin')
// 1-2-2. 导入 gulp-autoprefixer 第三方, 用于自动添加前缀
const autoprefixer = require('gulp-autoprefixer')

// 1-4. 导入 gulp-uglify 第三方, 用于把 js 代码压缩
const uglify = require('gulp-uglify')
// 1-4-2. 导入 gulp-babel 第三方, 用于把 es6 转换成 es5
const babel = require('gulp-babel')
// 1-5. 导入 gulp-htmlmin 第三方, 用于压缩 html 文件
const htmlmin = require('gulp-htmlmin')



// 2. 配置一个 打包 css 的任务
const cssHandler = () => {
  // 在配置任务的时候, 把 流 return 出去
  return gulp
    .src('./src/css/*.css')               // 找到原始文件
    .pipe(autoprefixer())                 // 自动添加前缀
    .pipe(cssmin())                       // 进行 css 代码的压缩
    .pipe(gulp.dest('./dist/css/'))       // 放在指定目录内
}


// 4. 配置一个打包 js 文件的任务
 const jsHandler = () => {
   return gulp
     .src('./src/js/*.js')
     .pipe(babel({ presets: [ '@babel/preset-env' ] })) // 把 ES6 转换成 ES5
     .pipe(uglify()) // 压缩 js 文件
     .pipe(gulp.dest('./dist/js/'))
 }

// 5. 配置一个打包 html 文件的任务
const htmlHandler = () => {
  return gulp
    .src('./src/html/*.html')
    .pipe(htmlmin({ // 进行压缩
      collapseWhitespace: true, // 把所有空格去掉
      collapseBooleanAttributes: true, // 简写所有布尔属性
      removeAttributeQuotes: true, // 移除属性中的双引号
      removeEmptyAttributes: true, // 移除空属性
      removeComments: true, // 移除注释内容
      removeScriptTypeAttributes: true, // 移除 script 标签默认的 type 属性
      removeStyleLinkTypeAttributes: true, // 移除 link 和 style 标签的默认 type 属性
      minifyCSS: true, // 压缩内嵌式 css 代码
      minifyJS: true, // 压缩内嵌式 js 代码
    }))
    .pipe(gulp.dest('./dist/html/'))
}

// 6. 配置一个转移 img 文件的任务
// const imgHandler = () => {
//   return gulp
//     .src('./src/img/**.*')
//     .pipe(gulp.dest('./dist/img/'))
// }

// 7. 配置一个转移 video 文件的任务
/* const ideaHandler = () => {
  return gulp
    .src('./src/idea/**.*')
    .pipe(gulp.dest('./dist/idea/'))
} */

// 8. 配置一个转移 audio 文件的任务
/* const jsonHandler = () => {
  return gulp
    .src('./src/json/**.*')
    .pipe(gulp.dest('./dist/json/'))
} */
// 9. 配置一个转移 fonts 文件的任务
const phpHandler = () => {
      return gulp
        .src('./src/php/**.*')
        .pipe(gulp.dest('./dist/php/'))
    }
    
    // 10. 配置一个转移 data 文件的任务
    /* const testHandler = () => {
      return gulp
        .src('./src/test/**.*')
        .pipe(gulp.dest('./dist/test/'))
    } */
    
    
    // 11. 配置一个总任务
    const defaultHandler =
      gulp.parallel(
        cssHandler,
        jsHandler, 
        htmlHandler, 
        // imgHandler, 
    //     ideaHandler,
        //jsonHandler,
        phpHandler,
        //testHandler,
    )
    
    // end 导出你配置的任务
    module.exports = {
      cssHandler,
      jsHandler,
      htmlHandler,
      // imgHandler,
      //ideaHandler,
      //jsonHandler,
      phpHandler,
     // testHandler,
      default: defaultHandler,
    }